/**
 * 
 */
package com.ssm.util.security;


import javax.annotation.Resource;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ssm.model.Model;
import com.ssm.model.bean.SsmUsers;
import com.ssm.model.mapper.UserMapper;

/*
* @author WTC E-mail:546895488@qq.com 
* @version 创建时间：2016年2月7日 下午2:42:11 
* 类说明 
*/
/**
 * @author WTC E-mail:546895488@qq.com 
 * @version 创建时间：2016年2月7日 下午2:42:11 
 */
@Service  
@Resource
@Transactional 
public class SSMRealm extends AuthorizingRealm{
	
	@Autowired
	protected Model M;
	@Autowired
	UserRoleInfo userRoleInfo;
	

	/**
     * 权限检查
     */
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		// TODO Auto-generated method stub
		//@author WTC E-mail:546895488@qq.com 
		//@version 创建时间：2016年2月7日 下午2:45:28 
		SsmUsers users=new SsmUsers();
		//获取登录时输入的用户名  
        String loginName= (String)principals.getPrimaryPrincipal();  
        //到数据库查是否有此对象
        UserMapper um=M.getMapper(UserMapper.class);
        users.setUsername(loginName);
        
      //到数据库查是否有此对象 
        
        users=um.selectOne(users);
        if(users!=null){  
            //权限信息对象info,用来存放查出的用户的所有的角色（role）及权限（permission）  
        	//SsmUser user=new SsmUser();
        	userRoleInfo.setUsername(users.getUsername());
            SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();  
            //用户的角色集合 
            info.addRoles(userRoleInfo.getRolesName());
            //用户的角色对应的所有权限，如果只使用角色定义访问权限 
            info.addStringPermissions(userRoleInfo.getPermissionsName());  
            return info;  
        }  
        System.out.println("cha");
        return null;  
    }  

	/**
     * 登录验证
     */
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
		// TODO Auto-generated method stub
		//@author WTC E-mail:546895488@qq.com 
		//@version 创建时间：2016年2月7日 下午2:45:28 
		SsmUsers user=new SsmUsers();
		//UsernamePasswordToken对象用来存放提交的登录信息  
        UsernamePasswordToken token=(UsernamePasswordToken) authenticationToken;  
        //查出是否有此用户 
        UserMapper um=M.getMapper(UserMapper.class);
        user.setUsername(token.getUsername());
        //user.setPassword(token.getPassword());
        user=um.selectOne(user);
        if(user!=null){  
            //若存在，将此用户存放到登录认证info中 
            return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());  
        }  
        return null;  
    }  

}
